# # 任务1.1：复杂切片操作
# lst = [10, 20, 30, 40, 50, 60, 70, 80,90]
# print("=== 复杂切片 ===")
# # 1.1.1 步长为2，取索引0-8的元素（隔1个取1个）
# print(f"步长2切片：{lst[::2]}") # 预期[10,30,50,70,90]
# # 1.1.2 反向切片（从后往前取，步长-1）
# print(f"反向切片(取后三个): {lst[-3::-1]}") # 预期[70,60,50,40,30,20,10]
# # 1.1.3 切片修改列表（替换索引2-4的元素）
# lst[2:5] = [35, 45, 55]
# print(f"切片修改后：{lst}")   # 预期[10,20,35,45,55,60,70,80,90]
#
# # 任务1.2：列表推导式（基础+嵌套）
# print("\n=== 列表推导式 ===")
# # 1.2.1 基础推导式：生成1-10的偶数列表（筛选条件）
# event_lst = [x for x in range(1, 11) if x % 2 == 0]
# print(f"l-10偶数列表: {event_lst}") # 预期[2,4,6,8,10]
# # 1.2.2 嵌套推导式：生成2行3列的矩阵（外层循环控制行，内层控制列）
# matrix = [[i * 3 + j for j in range(1, 4)] for i in range(2)]
# print(f"2行3列矩阵：{matrix}") # 预期[[1,2,3], [4,5,6]]
# # 1.2.3 推导式 vs 普通for循环（对比效率）
# # 用普通for循环生成1-10的平方列表
# square_lst = []
# for x in range(1, 11):
#     square_lst.append(x ** 2)
# print(f"1-10平方列表（普通循环）：{square_lst}")
# # 用推导式生成同样列表
# square_lst_comp = [x ** 2 for x in range(1, 11)]
# print(f"1-10平方列表（推导式）：{square_lst_comp}")



# 任务2：元组与生成器表达式
print("\n=== 元组与生成器 ===")
# 2.1 元组不可变性验证（尝试修改会报错，先注释）
tpl = (10, 20, 30, 40, 50)
print(f"元组原始值：{tpl}")
# tpl[1] = 25 # 取消注释运行，观察TypeError报错
# 2.2 生成器表达式（对比列表推导式，用()包裹）
# 列表推导式：生成1-100000的奇数列表（占用内存）
list_comp = [x for x in range(1, 100001) if x % 2 == 1]
print(f"列表推导式占用内存（估算）：{len(list_comp) * 4}字节（假设int占4字节）")
# 生成器表达式：仅保存生成逻辑，不占用内存
gen_expr = (x for x in range(1, 100001) if x % 2 == 1)
print(f"生成器表达式类型：{type(gen_expr)}") # 预期<class 'generator'>
# 遍历生成器（取前5个元素验证）
print(f"生成器前5个元素：", end="")
for _ in range(5):
    print(next(gen_expr), end=" ")  # 用next()获取下一个元素，预期1 3 5 7 9
